package edu.szcu.vitaguard.controller;

import edu.szcu.vitaguard.dto.LoginDTO;
import edu.szcu.vitaguard.entity.UserLogin;
import edu.szcu.vitaguard.service.UserLoginService;
import edu.szcu.vitaguard.util.R;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import java.time.LocalDateTime;
import java.util.Objects;

import java.util.HashMap;
import java.util.Map;

/**
 * 登录注册控制器
 */
@RestController
//@RequestMapping("/auth")
public class LoginController {

    private final UserLoginService userLoginService;

    public LoginController(UserLoginService userLoginService) {
        this.userLoginService = userLoginService;
    }

    /**
     * 用户登录
     *
     * @param loginDTO 登录信息（用户名、密码、验证码）
     * @return 登录结果，包含用户信息或错误消息
     */
    @PostMapping("/login")
    public R<UserLogin> login(@RequestBody LoginDTO loginDTO) {
        System.out.println(">>> 前端发送过来的数据是： = " + loginDTO);
        // 参数校验
        if (loginDTO == null || loginDTO.getUsername() == null || loginDTO.getPassword() == null) {
            return R.error("登录信息不完整");
        }

        // 验证码校验（实际项目中应该有验证码校验逻辑） todo ...
        // 此处简化处理，不做实际验证

        // 根据用户名查询用户信息
        UserLogin userLogin = userLoginService.getUserByName(loginDTO.getUsername());
        if (userLogin == null) {
            return R.error("用户名不存在");
        }

        // 密码校验（实际项目中应该使用加密算法）
        if (!Objects.equals(userLogin.getPassword(), loginDTO.getPassword())) {
            return R.error("密码错误");
        }

        // 登录成功，返回用户信息（实际项目中可能需要隐藏密码等敏感信息）
        return R.success(userLogin, "登录成功");
    }

    /**
     * 用户注册
     *
     * @param userLogin 用户信息
     * @return 注册结果
     */
    @PostMapping("/register")
    public R<Long> register(@RequestBody UserLogin  userLogin) {
        // 参数校验
        if (userLogin == null || userLogin.getUsername() == null || userLogin.getPassword() == null) {
            return R.error("注册信息不完整");
        }

        // 2. 角色字段强制校验
        if (userLogin.getRole() == null ||
                (!"admin".equals(userLogin.getRole()) && !"doctor".equals(userLogin.getRole()))) {
            return R.error("必须选择有效的用户角色（admin/doctor）");
        }

        // 检查用户名是否已存在
        UserLogin existingUser = userLoginService.getUserByName(userLogin.getName());
        if (existingUser != null) {
            return R.error("用户名已存在");
        }

        // 设置创建时间和更新时间
        LocalDateTime now = LocalDateTime.now();
        userLogin.setCreateTime(now);
        userLogin.setUpdateTime(now);

        // 调用服务进行注册
        Long userId = userLoginService.register(userLogin);
        if (userId == null) {
            return R.error("注册失败");
        }

        // ...校验逻辑...
        Long newUserId = userLoginService.register(userLogin);
        return R.success(userId, "注册成功");  // 直接返回Long

        // 注册成功
//        return R.success(userId, "注册成功");
    }
}
